#define _CRT_SECURE_NO_WARNINGS 1
include <iostream>
#include <assert.h>
using namespace std;

namespace chaos
{
	class string {
	public:
		/* 构造函数 */
		string(const char* str = "")
			: _size(strlen(str))        // 计算出字符串str的大小
			, _capacity(_size) {        // 初始容量等于字符串大小

			_str = new char[_capacity + 1];   // 开辟一块 "容量+1" 大小的空间 (_capacity存的是有效字符）
			strcpy(_str, str);                // 将传入的字符串str复制到 _str中
		}

		void Swap(string& tmp) {
			swap(_str, tmp._str);
			swap(_size, tmp._size);
			swap(_capacity, tmp._capacity);
		}

		/* 拷贝构造函数：s2(s1)
		string(const string& src)
			: _size(src._size)                // 拷贝string大小
			, _capacity(src._capacity) {      // 拷贝string容量
			// 拷贝string内容
			_str = new char[src._capacity + 1];        // 开辟一块和src相同容量的空间
			strcpy(_str, src._str);					   // 将src中的_str内容拷贝到自己的_str中
		}
		*/
		string(const string& src)
			: _str(nullptr)
			, _size(0)
			, _capacity(0) {

			string tmp(src._str);   // 拷贝构造一个src
			Swap(tmp);              // 现代写法：交换
		}


		/* 赋值重载：s1 = s3
		string& operator=(const string& src) {
			// 防止自己跟自己赋值
			if (this != &src) {
				// 1. 暂时用tmp开辟一块相同的空间
				char* tmp = new char[src._capacity + 1];
				// 2. 把src的值复制给tmp
				strcpy(tmp, src._str);
				// 3. 释放this原空间
				delete[] _str;
				// 4. 没翻车，把tmp交付给_src
				_str = tmp;
				_size = src._size;
				_capacity = src._capacity;
			}
			return *this;
		}
		string& operator=(const string& src) {
			// 防止自己跟自己赋值
			if (this != &src) {
				string tmp(src);   // 复用拷贝构造
				Swap(tmp);
			}
			return *this;
		}
		*/
		string& operator=(string src) {
			Swap(src);    // 正好调用拷贝构造，不如让形参充当tmp
			return *this;
		}


		/* 返回C格式的字符串：c_str */
		const char* c_str() const {
			return _str;
		}

		/* 求字符串大小：size() */
		size_t size() const {
			return _size;
		}

		/* operator[] */
		char& operator[](size_t pos) {
			assert(pos < _size);
			return _str[pos];  // 返回字符串对应下标位置的元素
		}
		const char& operator[](size_t pos) const {
			assert(pos < _size);
			return _str[pos];
		}

		————————————————

			zdfs

			原文链接：https ://blog.csdn.net/weixin_50502862/article/details/124506346